import { defineStore } from 'pinia';
import { jwtDecode } from 'jwt-decode';
import notify from '@/api/notify';
import { Snackbar } from '@varlet/ui';

export const useUserStore = defineStore('userStore', {
    state: () => ({
        userId: null,
        permissionFlag: null
    }),
    actions: {
        // 解密 token 并填充用户信息
        decodeToken() {
            const token = localStorage.getItem('token'); // 从 localStorage 获取 token
            if (token) {
                try {
                    const decodedToken = jwtDecode(token); // 使用 jwt-decode 解码 token
                    const currentTime = Math.floor(Date.now() / 1000); // 当前时间戳（秒）
                    // 检查 token 是否过期
                    if (decodedToken.exp && decodedToken.exp < currentTime) {
                        throw new Error('Token expired');
                    }
                    // 将解码后的 token 信息赋值给实例属性
                    this.userId = decodedToken.userId;
                    this.permissionFlag = decodedToken.permissionFlag;
                } catch (error) {
                    localStorage.removeItem('token');
                    notify.error('登录信息已过期，请重新登录');
                }
            }
        },
        // 设置用户信息
        setUserInfo(userData) {
            if (userData.token) {
                // 保存 token 到本地存储
                localStorage.setItem('token', userData.token);
                // 解码 token 获取用户信息
                this.decodeToken();
            }
        },
        //清除用户信息
        clearUserInfo() {
            this.userId = null;
            this.permissionFlag = null;
        },
        // 退出登录
        async logout() {
            // 清除本地存储的token
            localStorage.removeItem('token');
            // 清除用户信息
            this.clearUserInfo();
            // 显示退出登录成功提示
            Snackbar({
                content: '退出登录成功',
                type: 'success'
            });
        }
    }
});

// 兼容旧的导出方式
export const userStore = useUserStore;
